package acm.深度优先遍历;

import java.util.Scanner;

/**
 * 八皇后问题弱化版
 */
public class Q {
//    /**
//     * 二进制表示棋盘，1表示可以放，0表示不能放
//     * @return
//     */
//    public static int fun(int limit,int colLimit,int count){
//        if (count==0){
//            return 1;
//        }
//        int pos= limit&(colLimit);    //找到可以放棋子的位置
//        int curr=pos&(~pos+1);      //找到最右侧可以存放的位置
//        int res=0;
//        while (curr!=0){
//            res+=fun(limit,colLimit&(~curr),count-1);
//            pos-=curr;
//            curr=pos&(~pos+1);
//        }
//        return res;
//    }

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n;
        while ((n = sc.nextInt())!=-1){
            char[][] maze=new char[n][];
            int count = sc.nextInt();
            sc.nextLine();
            for (int i = 0; i < maze.length; i++) {
                maze[i]=sc.nextLine().toCharArray();
            }
            System.out.println(fun(maze, 0,count));
        }
    }
    public static int fun(char[][] maze,int row,int count){
        if (count==0){
            return 1;
        }
        if (row>=maze.length){
            return 0;
        }
        int res=0;
        while (maze.length-row>=count){
            for (int i = 0; i < maze[row].length; i++) {
                if (verify(maze,row,i)){
                    maze[row][i]='*';
                    res+=fun(maze,row+1,count-1);
                    maze[row][i]='#';
                }
            }
            row++;
        }
        return res;
    }
    public static boolean verify(char[][] maze,int row,int col){
        if (maze[row][col]=='.'){
            return false;
        }
        for (char[] chars : maze) {
            if (chars[col]=='*') {
                return false;
            }
        }
        return true;
    }
}
